﻿//========================================================
//
//  DESCRIPTION:  Cls_NHOM_NGUOIDUNG.cs
//
//  CREATED:	Huypvt, 07/02/2006
//
//  USED FOR:	Quản lý nhóm người dùng. 
//
//=================================================


using System;
using System.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;

namespace QLNHK.BLL {
	//Name: Cls_DS_CHUCNANG	Base class:	Cls_DS_CHUCNANG
	//Author: 	Huypvt		Date: 07/02/2006
	//Modifier:	Hungtq		Date: 08/02/2006
	//Thay đổi gì ?
	//Các Method cần thiết : 
	//		- ListByAll() : Trả về danh sách tất các các nhóm người dùng trong hệ thống.
	//			Return: DataSet.
	//		- ListByID(int intID) : Trả về thông tin nhóm người dùng theo ID.
	//			Return: Object NhomNguoiDung.
	//		- ListUserByIDNhomNguoiDung(int intIDNhomNguoiDung) : Trả về danh sách các người dùng thuộc nhóm.
	//			Return: DataSet.
	//		- DoInsert(string strTenNhom, string strMoTa): Insert một nhóm vào cơ sở dữ liệu.
	//			Return: int (Nếu gặp lỗi return -1, ngược lại return ID của nhóm mới Insert).
	//		- DoUpdate(int intIDNhomNguoiDung, string strTenNhom, string strMoTa) : Cập nhật thông tin của nhóm vào cơ sở dữ liệu.
	//			Return: int (Nếu gặp lỗi return -1).
	//		- DoDelete(int intIDNhomNguoiDung): Xóa thông tin của nhóm người dùng.
	//			Return: int (Nếu gặp lỗi return -1).
	//		- CheckTenNguoiDung(string strTenNhom): Kiểm tra tên nhóm người dùng đã tồn tại.
	//			Return: int (Nếu gặp lỗi return -1).
	/// <summary>
	/// Quản lý nhóm người dùng.
	/// </summary>
	public class Cls_NHOM_NGUOIDUNG
	{
		#region Variable Members
		
		private const string ST_NHOM_NGUOIDUNG_SELECT = "st_NHOM_NGUOIDUNGSelect"; // lưu tên thủ tục
		private const string ST_NHOM_NGUOIDUNG_INSERT = "st_NHOM_NGUOIDUNGInsert";
		private const string ST_NHOM_NGUOIDUNG_UPDATE = "st_NHOM_NGUOIDUNGUpdate";
		private const string ST_NHOM_NGUOIDUNG_DELETE = "st_NHOM_NGUOIDUNGDelete";
		private const string ST_NHOM_NGUOIDUNG_SELECTALL = "st_NHOM_NGUOIDUNGSelectAll";
		private const string ST_NHOM_NGUOIDUNG_SELECT_BY_USER_BY_ID = "st_NHOM_NGUOIDUNGSelectUserByID";
		private const string ST_NHOM_NGUOIDUNG_SELECT_TEN_NHOM = "st_NHOM_NGUOIDUNGSelectTenNhom";
		private const string TABLE_NAME = "tb_NHOM_NGUOIDUNG";//Tên bảng dữ liệu
		private Database db;
		private int _iD_Nhom_NguoiDung; //Mã nhóm
		private string _ten; //tên nhóm
		private string _mota;//Mo tả nhóm

		#endregion //Variable Members

		#region Properties

		public int ID_Nhom_NguoiDung
		{
			get{return this._iD_Nhom_NguoiDung;}
			set{this._iD_Nhom_NguoiDung = value;}
		}
		public string Ten
		{
			get{return this._ten;}
			set{this._ten = value;}
		}

		public string MoTa
		{
			get{return this._mota;}
			set{this._mota = value;}
		}

		#endregion //Properties

		#region Constructors

		public Cls_NHOM_NGUOIDUNG()
		{
			try
			{
				db = DatabaseFactory.CreateDatabase();
			}
			catch(Exception ex)
			{
				throw ex;
			}
		}

		public Cls_NHOM_NGUOIDUNG(int intIDNhomNguoiDung, string strTenNhom, string strMota)
		{
			this._iD_Nhom_NguoiDung = intIDNhomNguoiDung;
			this._ten = strTenNhom;
			this._mota = strMota;
		}
		
		#endregion //Constructors

		#region Methods
		private DbCommand InsertWrapper()
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_INSERT);
			db.AddInParameter(dbCommand,"@Ten", DbType.String,"Ten", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@MoTa", DbType.String,"Mota", DataRowVersion.Current);
			return dbCommand;
		}

		private DbCommand UpdateWrapper()
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_UPDATE);
			db.AddInParameter(dbCommand,"@ID_Nhom_NguoiDung", DbType.Int32, "ID_DS_Nhom_ChucNang", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@Ten", DbType.String, "Ten", DataRowVersion.Current);
			db.AddInParameter(dbCommand,"@TinhTrang", DbType.Boolean, "TinhTrang", DataRowVersion.Current);
			return dbCommand;
		}

		private DbCommand DeleteWrapper()
		{
			DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_DELETE);
			return dbCommand;
		}

		//Author: Huypvt	Date: 07/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Cập nhật thông tin của nhóm vào cơ sở dữ liệu.
		/// </summary>
		/// <param name="ds">Bảng dữ liệu thay đổi</param>
		/// <returns>int</returns>
		public int DoUpdate(DataSet ds)
		{
			try
			{
				int result = db.UpdateDataSet(ds,Cls_NHOM_NGUOIDUNG.TABLE_NAME,this.InsertWrapper(),this.UpdateWrapper(),this.DeleteWrapper(),UpdateBehavior.Standard);
				return result;
			}
			catch(Exception ex)
			{
				throw ex;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Trả về danh sách tất các các nhóm người dùng trong hệ thống.
		/// </summary>
		/// <returns>DataSet</returns>
		public DataSet ListByAll()
		{
			try
			{
				DataSet dsNhomNguoiDung = new DataSet();
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_SELECTALL);
				db.LoadDataSet(dbCommand,dsNhomNguoiDung,Cls_NHOM_NGUOIDUNG.TABLE_NAME);
				return dsNhomNguoiDung;
			}
			catch
			{
				return null;
			}
		}

		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Trả về thông tin nhóm người dùng theo ID.
		/// </summary>
		/// <param name="intIDNhomNguoiDung"></param>
		/// <returns>DataSet</returns>
		public DataSet ListByID(int intIDNhomNguoiDung)
		{
			try
			{
				DataSet dsNhomNguoiDung = new DataSet();
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_SELECT);
				db.AddInParameter(dbCommand,"@ID_Nhom_NguoiDung", DbType.Int32, intIDNhomNguoiDung);
				db.LoadDataSet(dbCommand,dsNhomNguoiDung,Cls_NHOM_NGUOIDUNG.TABLE_NAME);
				
				return dsNhomNguoiDung;
			}
			catch
			{
				return null;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Trả về danh sách các người dùng thuộc nhóm.
		/// </summary>
		/// <param name="intIDNguoiDung">Mã nhóm người dùng</param>
		/// <returns>int</returns>
		public DataSet ListUserByIDNhomNguoiDung(int intIDNhomNguoiDung)
		{
			try
			{
				DataSet dsNhomNguoiDung = new DataSet();
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_SELECT_BY_USER_BY_ID);
				db.AddInParameter(dbCommand,"@ID_Nhom_NguoiDung", DbType.Int32, intIDNhomNguoiDung);
				db.LoadDataSet(dbCommand,dsNhomNguoiDung,Cls_NHOM_NGUOIDUNG.TABLE_NAME);
				return dsNhomNguoiDung;
			}
			catch
			{
				return null;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Kiểm tra tên nhóm người dùng đã tồn tại.
		/// </summary>
		/// <param name="strTenNhom">Tên nhóm người dùng</param>
		/// <returns>int</returns>
		public int CheckTenNguoiDung(string strTenNhom)
		{
			try
			{
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_SELECT_TEN_NHOM);
				db.AddInParameter(dbCommand,"@Ten", DbType.String, strTenNhom);
				return Convert.ToInt32(db.ExecuteScalar(dbCommand));
			}
			catch
			{
				return -1;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Insert một nhóm vào cơ sở dữ liệu.
		/// </summary>
		/// <param name="strTenNhom">Tên nhóm</param>
		/// <param name="strMoTa">Mô tả</param>
		/// <returns>int</returns>
		public int DoInsert(string strTenNhom, string strMoTa)
		{
			try
			{
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_INSERT);
				db.AddInParameter(dbCommand,"@Ten", DbType.String, strTenNhom);
				db.AddInParameter(dbCommand,"@Mota", DbType.String, strMoTa);
				
				return Convert.ToInt32(db.ExecuteScalar(dbCommand));
			}
			catch
			{
				return -1;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Cập nhật thông tin của nhóm vào cơ sở dữ liệu.
		/// </summary>
		/// <param name="intIDNguoiDung">Mã nhóm người dùng</param>
		/// <param name="strTenNhom">Tên nhóm</param>
		/// <param name="strMoTa">Mô tả</param>
		/// <returns>int</returns>
		public int DoUpdate(int intIDNhomNguoiDung, string strTenNhom, string strMoTa)
		{
			try
			{
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_UPDATE);
				db.AddInParameter(dbCommand,"@ID_Nhom_NguoiDung", DbType.Int32, intIDNhomNguoiDung);
				db.AddInParameter(dbCommand,"@Ten", DbType.String, strTenNhom);
				db.AddInParameter(dbCommand,"@Mota", DbType.String, strMoTa);
				
				return Convert.ToInt32(db.ExecuteScalar(dbCommand));
			}
			catch
			{
				return -1;
			}
		}
		//Author: Hungtq	Date: 08/02/2006
		//Modifier:		Date:
		// Thay đổi gì	 ?
		/// <summary>
		/// Xóa thông tin của nhóm người dùng.
		/// </summary>
		/// <param name="intIDNguoiDung">Mã nhóm người dùng</param>
		/// <returns>int</returns>
		public int DoDelete(int intIDNhomNguoiDung)
		{
			int result=-1;
			try
			{
				DbCommand dbCommand = db.GetStoredProcCommand(Cls_NHOM_NGUOIDUNG.ST_NHOM_NGUOIDUNG_DELETE);
				db.AddInParameter(dbCommand,"@ID_Nhom_NguoiDung", DbType.Int32, intIDNhomNguoiDung);
				
				result = Convert.ToInt32(db.ExecuteScalar(dbCommand));
			}
			catch(Exception ex)
			{
				throw ex;
			}

			return result;
		}
		#endregion //Methods
	}

}
